# encoding: utf-8
# @author: luzhangdan
# @file: logger.py
# @time: 2021/9/9 14:28

import logging.handlers
import time
from common.setting import DIR_NAME


class GetLogger:
    """
    当已经创建了logger对象的时候，那么之后就不在创建了，也就是只创建一次对象
    """
    # 把logger对象的初始值设置为None
    logger = None

    # 创建logger，并且返回这个logger
    @classmethod
    def get_logger(cls):
        if cls.logger is None:
            # 创建日志器，控制他的创建次数
            cls.logger = logging.getLogger('api_keywords')  # 不是None
            # 设置总的级别，debug/info/warning/error
            cls.logger.setLevel(logging.INFO)
            # 获取格式器
            # 要给格式器设置要输出的样式
            fmt = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s"
            # 创建格式器，并且给他设置样式
            fm = logging.Formatter(fmt)
            # 创建处理器 按照时间进行切割文件
            tf = logging.handlers.TimedRotatingFileHandler(
                filename=DIR_NAME + '/logs/' + time.strftime("%Y_%m_%d") + '.log',  # 原日志文件
                when='D',  # 间隔多长时间把日志存放到新的文件中
                interval=1,
                backupCount=3,  # 除了原日志文件，还有3个备份
                encoding='utf-8'
            )
            logging.basicConfig(level=logging.INFO, format=fmt)  # 这是在控制台上打印日志信息

            # 在处理器中添加格式器
            tf.setFormatter(fm)
            # 在日志器中添加处理器
            cls.logger.addHandler(tf)

        return cls.logger
